"use strict";

const Controller = require("egg").Controller;

class HomeController extends Controller {
    /**
     * 欢迎页
     */
    async index() {
        const { ctx } = this;
        ctx.body = "hi, egg";
    }

    /**
     * 校验验证码
     */
    async login() {
        // 从请求体中，获取手机号和验证码
        const { mobile, code } = this.ctx.request.body;
        // 查询是否存在该验证码
        let res = await this.service.code.findByMobile(mobile);
        // 验证码表中，没有改验证码记录
        if (!res) {
            this.ctx.body = {
                code: 404,
                message: "验证码不存在，无法校验",
            };
            return;
        }
        // 检查验证码是否过期，验证码有效期 10 分钟
        let expired_time = Date.parse(res.create_time) + 10 * 60000;
        if (expired_time < Date.now()) {
            this.ctx.body = {
                code: 403,
                message: "验证码已过期，请重新获取验证码",
            };
            return;
        }
        // 检查验证码是否正确
        if (code !== res.code) {
            this.ctx.body = {
                code: 400,
                message: "验证码不正确",
            };
            return;
        }
        // 验证码校验成功，找到手机号对应的用户登录
        let user = await this.service.user.findByMobile(mobile);
        // 如果用户不存在，说明还没录入系统中，不让登陆系统，因为即使登陆了，也不知道该展示什么权限菜单
        if (!user) {
            ctx.body = {
                code: 404,
                message: "该手机号未录入",
            };
            return;
        }
        // 生成 token
        const token = this.ctx.helper.genToken({ ...user });
        // 获取用户权限菜单（前端路由）
        let menu = await this.service.acl.readListByRid(user.rid);
        // 返回成功响应
        this.ctx.body = {
            code: 200,
            data: { token, menu, user },
            message: "登录成功",
        };
    }
}

module.exports = HomeController;
